﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Librerias;

// Autor: Arturo Serna


namespace eCampus
{
    public partial class FormEventoConsultar : Form
    {
        string usuario;
        string asignatura;

        ENEventoAsignatura en = null;
        bool busqueda = false;

        /// <summary>
        /// Constructor
        /// </summary>
        /// <param name="usu">Correo del profesorCorreo</param>
        /// <param name="asi">Cógido de la asignatura</param>
        public FormEventoConsultar(string usu, string asi)
        {
            usuario = usu;
            asignatura = asi;
            en = new ENEventoAsignatura(usuario, asignatura);

            InitializeComponent();
            cbFiltro.SelectedIndex = 0;
            ActualizaDatos(true);
        }

        /// <summary>
        /// Actualiza el contenido del DataGrid, el cuadro resmen y el calendario
        /// </summary>
        private void ActualizaDatos(bool primeraVez=false)
        {
            try
            {
                if (busqueda)
                {
                    dgEventos.DataSource = en.ConsultaEventos(tbBuscar.Text, cbFiltro.SelectedIndex);
                }
                else
                {
                    dgEventos.DataSource = en.ConsultaEventos();
                }

                dgEventos.Columns["eveAsigId"].Visible = false;
                dgEventos.Columns["eveAsigCorreo"].Visible = false;
                dgEventos.Columns["eveAsigCodigo"].Visible = false;
                dgEventos.Columns["eveAsigDate"].Visible = false;
                dgEventos.Columns["eveAsigTexto"].Visible = false;


                if (primeraVez)
                {
                    //Añade columna eliminar
                    DataGridViewImageColumn ColEliminar = new DataGridViewImageColumn();
                    ColEliminar.Name = "elim";
                    ColEliminar.HeaderText = "";
                    ColEliminar.Image = eCampus.Properties.Resources.btBorrar;
                    ColEliminar.Width = 30;
                    dgEventos.Columns.Add(ColEliminar);

                    dgEventos.AlternatingRowsDefaultCellStyle.BackColor = Color.LightGoldenrodYellow;

                    //Establece propiedades de columnas
                    dgEventos.Columns["eveAsigAsunto"].HeaderText = "Evento";
                    dgEventos.Columns["eveAsigF_ini"].HeaderText = "Fecha inicial";
                    dgEventos.Columns["eveAsigF_fin"].HeaderText = "Fecha final";
                    dgEventos.Columns["eveAsigAsunto"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
                }


                //Si la tabla no está vacia...
                if (dgEventos.Rows.Count > 0)
                {
                    //Escribe el cuadro resumen con el primer elemento.
                    ActualizaResumen(0);


                    //Pinta en negrita las fechas en el calendario
                    if (!busqueda)
                    {
                        DateTime[] fechas = new DateTime[dgEventos.Rows.Count];
                        for (int i = 0; i < dgEventos.Rows.Count; i++)
                        {
                            fechas[i] = Convert.ToDateTime(dgEventos["eveAsigF_ini", i].Value);
                        }
                        calEvento.BoldedDates = fechas;
                    }
                }
            }
            catch (Exception)
            {
                MessageBox.Show("Error al cargar los datos de la tabla", "Error");
            }
        }

        /// <summary>
        /// Invoca al formulario FormEventoCrearModificar para crear un nuevo evento.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="entidadUsuario"></param>
        private void btNuevo_Click(object sender, EventArgs e)
        {
            FormEventoCrearModificar n = new FormEventoCrearModificar(usuario,asignatura);
            n.ShowDialog();

            //Borra la búsqueda (para que se vea en la tabla)
            btRestablecer_Click(sender, e);

            ActualizaDatos();
        }

        /// <summary>
        /// Actualiza el cuadro resumen
        /// </summary>
        /// <param name="fila">Fila de la tabla que se desea mostrar</param>
        private void ActualizaResumen(int fila)
        {
            lbTitulo.Text = dgEventos["eveAsigAsunto",fila].Value.ToString();

            lbFecha.Text = "Del " + dgEventos["eveAsigF_ini", fila].Value.ToString() +
                            " al " + dgEventos["eveAsigF_fin", fila].Value.ToString();

            tbDescripcion.Text = dgEventos["eveAsigTexto", fila].Value.ToString();
        }


        /// <summary>
        /// Acciones al hacer click en una celda:
        /// Mostrar el cuadro resumen, o eliminar si la celda es la de eliminar
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="entidadUsuario"></param>
        private void dgEventos_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            if (e.RowIndex >= 0)
            {

                if (e.ColumnIndex == dgEventos.Columns["elim"].Index)
                {
                    if (MessageBox.Show("¿Desea eliminar permanentemente el evento \"" + dgEventos["eveAsigAsunto",e.RowIndex].Value.ToString() + "\"?", "Eliminar evento", MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button2) == DialogResult.Yes)
                    {
                        (new ENEventoAsignatura(int.Parse(dgEventos["eveAsigId", e.RowIndex].Value.ToString()))).Baja();
                        ActualizaDatos();
                    }
                }
                else
                {
                    ActualizaResumen(e.RowIndex);
                }
            }
        }

        /// <summary>
        /// Acción de doble click sobre una celda. 
        /// Abre el evento para consulta detallada o modificación
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="entidadUsuario"></param>
        private void dgEventos_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
        {
            
            if (e.RowIndex >= 0)
            {
                ENEventoAsignatura ev = new ENEventoAsignatura(int.Parse(dgEventos["eveAsigId", e.RowIndex].Value.ToString()),
                                                               dgEventos["eveAsigCorreo", e.RowIndex].Value.ToString(),
                                                               dgEventos["eveAsigCodigo", e.RowIndex].Value.ToString(),
                                                                Convert.ToDateTime(dgEventos["eveAsigDate", e.RowIndex].Value.ToString()),
                                                               dgEventos["eveAsigAsunto", e.RowIndex].Value.ToString(),
                                                               dgEventos["eveAsigTexto", e.RowIndex].Value.ToString(),
                                                                Convert.ToDateTime(dgEventos["eveAsigF_ini", e.RowIndex].Value),
                                                                Convert.ToDateTime(dgEventos["eveAsigF_fin", e.RowIndex].Value));

                FormEventoCrearModificar n = new FormEventoCrearModificar(ev);
                n.ShowDialog();
                ActualizaDatos();
            }
        }

        /// <summary>
        /// Búsqueda simple
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="entidadUsuario"></param>
        private void btBusquedaSimple_Click(object sender, EventArgs e)
        {
            busqueda = true;
            btRestablecer.Visible = true;
            ActualizaDatos();
        }

        /// <summary>
        /// Cuando el profesorCorreo pincha en un día del calendario se muestran los eventos que empiezan ese día.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="entidadUsuario"></param>
        private void calEvento_DateSelected(object sender, DateRangeEventArgs e)
        {
            busqueda = true;
            btRestablecer.Visible = true;
            tbBuscar.Text = e.Start.Day + "/" + e.Start.Month + "/" + e.Start.Year;
            cbFiltro.SelectedIndex = 2;
            ActualizaDatos();
        }

        /// <summary>
        /// Elimina la búsqueda y vuelve a mostrar todos los eventos en el DataGrid
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="entidadUsuario"></param>
        private void btRestablecer_Click(object sender, EventArgs e)
        {
            busqueda = false;
            btRestablecer.Visible = false;
            tbBuscar.Text = "";
            cbFiltro.SelectedIndex = 0;
            ActualizaDatos();
        }

        private void dgEventos_SelectionChanged(object sender, EventArgs e)
        {
            dgEventos.ClearSelection();
        }

    }
}
